home *** CD-ROM | disk | FTP | other *** search
/ NetNews Offline 2 / NetNews Offline Volume 2.iso / news / de / comm / isdn / 6843 < prev    next >
Text File  |  1996-08-06  |  4KB  |  149 lines

  1. Path: pa.dec.com!usenet
  2. From: 73064.1157@compuserve.com (Rudi Ernst)
  3. Newsgroups: de.comm.isdn,de.comp.os.ms-windows,fido.ger.isdn
  4. Subject: ISDN-Verbindung abbrechen mit ISDI 3.0
  5. Date: Wed, 20 Mar 1996 12:09:41 GMT
  6. Organization: Digital Equipment Corporation, Palo Alto, CA, USA
  7. Message-ID: <4iosjg$lnh@usenet.pa.dec.com>
  8. NNTP-Posting-Host: ufc234.ufc.dec.com
  9. X-Newsreader: Forte Free Agent 1.0.82
  10.  
  11. Hallo Leute,
  12.  
  13. ich habe zur Zeit Probleme mit einer ISDN-TCP/IP-Applikation (win16), 
  14. in der ich eine ISDN-Verbindung vom Programm aus beenden mu▀. Fⁿr das
  15. IP-Routing verwenden wir hier ISDI von Hr. Herbert Hanewinkel. Nach
  16. dem socket close hΣlt ISDI die ISDN-Verbindung noch eine einstellbare
  17. Zeit lang offen. Das Programm soll nun die ISDI-ISDN-Verbindung
  18. beenden.
  19. Unter ISDI 2.x funktionierte dies ⁿber den Control Interrupt des ISDI-
  20. Treibers, unter ISDI 3.0 mu▀ laut Hr. Hanewinkel direkt eine Treiber-
  21. Funktion aufgerufen werden. Die Aufrufe wurden von Hr. Hanewinkel zur
  22. Verfⁿgung gestellt, und funkionieren auch prΣchtig, wenn ich sie in 
  23. ein DOS-Programm einbaue, nicht jedoch in einem Windows-Programm. 
  24.  
  25. Momentan wei▀ ich nicht, ob ich ein ISDI-Problem habe oder ein 
  26. Windows-Problem (funktionieren die int 21h unter Windows ⁿberhaupt).
  27.  
  28. Der nachfolgende Programmausschnitt wurde mit Visual C++ 1.51 erstellt
  29.  
  30. und lΣuft bis zum Aufruf der Funktion PaketInt(), wenn er in eine 
  31. QuickWin-App eingebaut ist, in einer Windows-App() steigt 
  32. das Programm schon beim ersten int 21h aus.
  33.  
  34.  
  35. #include <dos.h>
  36. #include <stdio.h>
  37.  
  38. typedef void (far *InterruptPtr)(void);
  39. typedef unsigned short word;
  40. typedef unsigned char byte;
  41. #define DEBUG TRUE
  42. #define PDF_ResetInterface 7
  43.  
  44. typedef struct {
  45.     word op;
  46.     word status;
  47.     byte far *addr1;
  48.     byte far *addr2;
  49.     word para1;
  50.     word para2;
  51.     } Ndis_req_type;
  52.  
  53. static InterruptPtr PaketInt;
  54. Ndis_req_type drv_req = {0, };
  55. Ndis_req_type *p = &drv_req;
  56.                           
  57. #ifdef CAPI2
  58.  char __far *dev_file = "CINDI$";
  59. #else
  60.  char __far *dev_file = "ISDI$";
  61. #endif
  62.                         
  63. main {
  64.     byte far *ios;
  65.     word handle;
  66.     word dev; 
  67.     int i;
  68.  
  69.     dev = FP_OFF(dev_file);
  70.     _asm mov dx, dev;        // open driver
  71.     _asm mov ax, 3dc2h;
  72.     _asm int 21h;
  73.     _asm jnc ok1;
  74. #ifdef DEBUG
  75.     printf("driver open failed\n");
  76. #endif
  77.     return 0L;
  78. ok1:
  79.     _asm mov handle, ax;
  80. #ifdef DEBUG
  81.     printf("driver open ok1\n");
  82. #endif
  83.  
  84.     drv_req.op      = 1;             // driver info call
  85.     drv_req.status  = 0;
  86.     drv_req.addr1   = (byte far *) 0;
  87.     drv_req.addr2   = (byte far *) 0;
  88.     drv_req.para1     = 0;
  89.     drv_req.para2     = 0;
  90.  
  91.     dev = FP_OFF(p);
  92.     _asm mov dx, dev;
  93.     _asm mov cx, 16;
  94.     _asm mov bx, handle;
  95.     _asm mov ax, 4402h;
  96.     _asm int 21h;
  97.     _asm jnc ok3;
  98.     return 0L; 
  99.  
  100. ok3:
  101.     ios = MK_FP(drv_req.para2, drv_req.para1);
  102.     PaketInt = (InterruptPtr) drv_req.addr1;
  103. #ifdef DEBUG
  104.     printf("driver info call ok\n");
  105.     // 1, ISDI ueber winstart.bat
  106.     // Einsprung wie bei Packet
  107.     // Ptr auf ISDI Datenstruktur
  108.     printf("got vmmflag: %x\n", drv_req.status); 
  109.     printf("got pktint: %lx\n", drv_req.addr1);     
  110.     printf("IOS address: %lx\n", ios);                 
  111. #endif
  112.  
  113.     _asm mov bx, handle;        // close device
  114.     _asm mov ax, 3e00h;
  115.     _asm int 21h;
  116.     _asm jnc ok4;
  117. #ifdef DEBUG
  118.     printf("driver close failed\n");
  119. #endif
  120.     return 0;
  121.  
  122.  
  123. ok4:
  124.     if(drv_req.status == 1) return 0;
  125.  
  126.     // 1, ISDI ueber winstart.bat
  127.     // Einsprung wie bei Packet
  128.     printf("got vmmflag: %x\n", drv_req.status); 
  129.     printf("got pktint: %lx\n", drv_req.addr1);     
  130.     _asm mov ah, PDF_ResetInterface;
  131.     _asm pushf;
  132.     PaketInt ();
  133.     ^^^^^^^^^^^^ General Protection Fault
  134.  
  135.     _asm jnc nc1;
  136.     return (-1);
  137. nc1:
  138.     return (0);
  139. }              
  140.  
  141. ciao, Rudi
  142.  
  143. ------------------------------------------------------------------------------------
  144. Rudolf Ernst                  Tel. 089/8212650
  145. Blumenauer Str. 151 A    FAX: 089/82908098
  146. 81241 Mⁿnchen            eMail: 73064.1157@compuserve.com
  147. ------------------------------------------------------------------------------------
  148.  
  149.